package com.ppt.android.base.ktx

import android.text.TextUtils
import com.ppt.android.base.utils.DecimalFormatUtils
import com.ppt.android.base.utils.LogUtils
import java.math.BigDecimal
import java.text.DecimalFormat

/**
 *
 * @author ZouJiaCai
 * @since 2023/4/17 18:19
 */
fun String.formatNumber(number: Long, isCleartext: Boolean): String? {
    // 将数字转换为字符串
    val numberStr = number.toString()

    // 检查数字是否至少有 4 位
    if (numberStr.length < 4) {
        println("错误：数字必须至少为 4 位")
        return null
    }

    // 提取最后 4 位数字
    val last4Digits = numberStr.takeLast(4)

    var asterisks = numberStr
    if (!isCleartext){
        // 使用星号替换剩余的数字
        asterisks = "*".repeat(numberStr.length - 4)
    }
    // 每 4 位数字后添加一个空格
    val formattedNumber =
        if (!isCleartext){
            asterisks.chunked(4).joinToString(" ") + " " + last4Digits
        }else {
            asterisks.chunked(4).joinToString(" ")
        }
    return formattedNumber
}

/**
 * 处理价格（分）
 */
fun String?.formatPrice(): String {
    if (this == null) return "0"
    return try {
        val bd = BigDecimal((this.toDouble() / 100.0).toString())
        bd.stripTrailingZeros().toPlainString()
    }catch (e: Exception){
        e.printStackTrace()
        "0"
    }
}

/**
 * 处理分佣比例 万分位 "1234" 表示 12.34%
 */
fun String?.formatRate(): String {
    if (this == null) return "0%"
    return try {
        val bd = BigDecimal((this.toDouble() / 100.0).toString())
        bd.stripTrailingZeros().toPlainString() + "%"
    }catch (e: Exception){
        e.printStackTrace()
        "0%"
    }
}

/**
 *
 */
fun String?.formatIdCardNum(): String{
    if (this == null || TextUtils.isEmpty(this)) return  ""
    return try {
        val numberStr = this
        // 提取最后 4 位数字
        val last4Digits = numberStr.takeLast(4)
        var asterisks = numberStr
        // 使用星号替换剩余的数字
        asterisks = "*".repeat(numberStr.length - 4)
        // 每 4 位数字后添加一个空格
        val formattedNumber = asterisks.chunked(4).joinToString("") + "" + last4Digits
        formattedNumber
    }catch (e:Exception){
        e.printStackTrace()
        ""
    }
}

/**
 * 如果数字大于10000，它将在后面拼接"万"，并保留两位小数
 */
fun String?.formatNumberInWan(): String{
    if (this == null || TextUtils.isEmpty(this)) return  ""
    return this
    /*val number = this.toDoubleOrNull()
    return if (number != null) {
        val result = if (number > 10000) {
            val decimalFormat = DecimalFormat("#.00")
            val formattedNumber = decimalFormat.format(number / 10000)
            val bd = BigDecimal(formattedNumber)
            "${bd.stripTrailingZeros().toPlainString()}万"
        } else {
            val bd = BigDecimal(number.toString())
            bd.stripTrailingZeros().toPlainString()
        }
        (result)
    } else {
        LogUtils.e("输入的字符串不是有效的数字")
        ""
    }*/
}

fun String.isValidChinesePhoneNumber(): Boolean {
    val phoneNumber = this
    val pattern = "^1[3-9]\\d{9}$".toRegex()
    return pattern.matches(phoneNumber)
}